#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021/1/28
# @Author: Sunny
# ========================

#---------------------------------------闭包函数-----------------------------------------------------
"""
闭包：
闭包函数实现的三个条件：
    1.函数中嵌套一个函数
    2.外层函数返回的是嵌套的内层函数
    3.嵌套的内层函数对外部作用域有非全局变量的引用（内层函数引用外层函数局部变量的参数）

闭包函数调用，返回的不仅仅是个函数，这个函数还有一个封闭的外部作用域

闭包的作用：保证数据的安全性，封闭数据
"""
#此函数不是闭包函数，因为嵌套的内层函数引用了外部的全局变量
# a=100
# def func():
#     # a=100
#     def wrapper():
#         print(a * 2)
#     return wrapper

#此函数为闭包函数，满足闭包的三个条件
# def func():
#     a=100
#     def wrapper():
#         print(a * 2)
#     return wrapper

def fun4():
    print('1234')

#此为闭包函数
def fun3(n):
    print('闭包函数的fun3调用了')
    a = 999
    def wrapper():
        print(n)
        print(a)
        print('闭包函数的wrapper调用了')
    return wrapper

#调用闭包函数后，返回的fun3局部作用域内的一个函数，
#它比直接定义在外部的函数，多了一个封闭的作用域
fun5 = fun3(100)
a = 100
n = 1000
fun4()
#无论fun怎么使用，外层函数的n参数已经被封闭，数据无法改变，所以闭包函数的作用也在于封闭数据，保证数据的安全
fun5()



from ddt import data